import { useAuthStore } from '@/stores/authStore';
import axios from 'axios';

// 创建 axios 实例
const instance = axios.create({
    baseURL: 'http://localhost:3000', // 设置基础 URL
    timeout: 10000, // 请求超时时间
});

// 请求拦截器
instance.interceptors.request.use(
    (config) => {
        // 发送请求携带token
        const token=useAuthStore().getToken()

        if (token) {
            config.headers['token'] = `${token}`;
        }
        return config;
    },
    (error) => {
        if (error.response) {
            console.error('Response Error:', error.response.status, error.response.data);
        } else if (error.request) {
            console.error('Request Error:', error.request);
        } else {
            console.error('Error Message:', error.message);
        }
        return Promise.reject(error);
    }
);

// 响应拦截器
instance.interceptors.response.use(
    (response) => {
        // 对响应数据做点什么
        return response;
    },
    (error) => {
        // 对响应错误做点什么
        if (error.response) {
            // 请求已发出，但服务器响应的状态码不在 2xx 范围内
            console.error('Response Error:', error.response.status, error.response.data);
        } else if (error.request) {
            // 请求已发出，但没有收到响应
            console.error('Request Error:', error.request);
        } else {
            // 其他错误
            console.error('Error Message:', error.message);
        }
        return Promise.reject(error);
    }
);

/**
 * 通用的请求方法
 * @param config - Axios 请求配置
 * @returns 返回响应数据或原始响应对象
 */
export const request = async <T>(config) => {
    try {
        const response = await instance(config);
        // 根据需求返回 response.data 或整个 response
        return response.data as T;
    } catch (error) {
        // 抛出错误以便调用者处理
        throw error;
    }
};

export default request;